package rothag.views.gamestep;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.io.IOException;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import rothag.controller.MainController;
import rothag.graphics.*;
import rothag.views.JPanelBase;
import rothag.graphics.roulette.CompteurTournantJPanel;

/**
 * @author Gaetan, Gulian
 * @version 0.1
 * @date 14/12/2010
 */

public class InfosTourJPanel extends JPanelBase {

    private JPanel panelJoueur;
    private JPanel panelTour;
    private JLabel[] joueurLabelList;
    private CompteurTournantJPanel tour;
    private int tailleNormale;
    private int tailleAgrandie;
    private int indexJoueurCourant;

    /** Creates new form InfosTourJPanel */
    public InfosTourJPanel(MainController controller) throws IOException {
        super(controller);

        // Layout
        BorderLayout layout = new BorderLayout();
        setLayout(layout);

        setOpaque(false);

        // Définition de la taille
        hauteur = 50;
        largeur = 718;

        // Taille des affichages
        tailleNormale = 20;
        tailleAgrandie = 30;
        indexJoueurCourant = -1;

        createPanelJoueur();
        add(panelJoueur, BorderLayout.WEST);

        panelTour = new JPanel();
        panelTour.setLayout(new BorderLayout(5, 0));

        panelTour.add(Box.createRigidArea(new Dimension(100,13)), BorderLayout.PAGE_START);

        JLabel label = new JLabel("Tour : ");
        label.setFont(GraphicsHelper.getFont(20, null));
        label.setVerticalAlignment(SwingConstants.BOTTOM);
        panelTour.add(label, BorderLayout.LINE_START);

        tour = new CompteurTournantJPanel(3, 37);
        tour.setOpaque(false);
        panelTour.add(tour, BorderLayout.LINE_END);

        panelTour.setOpaque(false);
        add(panelTour, BorderLayout.EAST);
    }

    /**
     * Affiche le nom des joueurs
     *
     * @param joueurList Liste des noms à afficher
     */
    public void setJoueurList(String[] joueurList) {
        joueurLabelList = new JLabel[joueurList.length];

        Font font = GraphicsHelper.getFont(tailleNormale, null);

        for (int i = 0; i < joueurList.length; i++) {
            JLabel label = createLabelJoueur(joueurList[i], font);

            joueurLabelList[i] = label;
            panelJoueur.add(label);
        }
    }

    /**
     * Agrandit le nom du joueur à l'index voulu
     *
     * @param index Index voulu !
     */
    public void setJoueur(int index) {
        indexJoueurCourant = index;

        if (indexJoueurCourant > joueurLabelList.length - 1) {
            GraphicsHelper.afficherErreur("Erreur", "Erreur lors dU changement de joueur", this).setVisible(true);
            System.exit(1);
        } else {
            panelJoueur.removeAll();

            for (int i = 0; i < joueurLabelList.length; i++) {
                JLabel label = joueurLabelList[i];
                int tailleFont = i == index ? tailleAgrandie : tailleNormale;

                Font font;
                if (i == indexJoueurCourant) {
                    font = GraphicsHelper.getFont(tailleFont, "bold");
                } else {
                    font = GraphicsHelper.getFont(tailleFont, null);
                }

                label = createLabelJoueur(label.getText(), font);
                joueurLabelList[i] = label;

                panelJoueur.add(label);
            }
        }
    }

    /**
     * Met à jour le numéro du tour
     *
     * @param valeur Nouveau numéro de tour
     */
    public void setTour(int valeur) {
        tour.setValue(Integer.toString(valeur));
    }

    /**
     * Crée le panel pour afficher le nom des joueurs
     */
    private void createPanelJoueur() {
        panelJoueur = new JPanel();
        panelJoueur.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0));
        panelJoueur.setBackground(new Color(0, 0, 0, 0));
    }

    /**
     * Crée un label pour afficher le nom d'un joueur
     *
     * @param joueur Nom du joueur
     * @param font Font à utiliser
     * @return Label créé
     */
    private JLabel createLabelJoueur(String joueur, Font font) {
        JLabel label = new JLabel(joueur);
        label.setFont(font);
        label.setPreferredSize(new Dimension(label.getPreferredSize().width, hauteur));
        label.setVerticalAlignment(SwingConstants.BOTTOM);


        return label;


    }
}
